///*****************************************Copyright(C)******************************************
//****************************************** *********************************************
//*------------------------------------------文件信息---------------------------------------------
//* FileName          : G4_CAT1.c
//* Author            : 张婷颖
//* Version           : 1.0V
//* Description       :
//*----------------------------------------历史版本信息-------------------------------------------
//* History           :
//* Description       :
//*-----------------------------------------------------------------------------------------------
//***********************************************************************************************/
///* Includes-----------------------------------------------------------------------------------*/
//#include "G4_CAT1.h"
//#include "bsp_uart.h"
//#include "stdio.h"
//#include "stdlib.h"
///* Private define-----------------------------------------------------------------------------*/
//#if G4_CAT1
///* Private typedef----------------------------------------------------------------------------*/
//
///* Private macro------------------------------------------------------------------------------*/
//
///* Private variables--------------------------------------------------------------------------*/
//  int j;
//#if MQTT_4G_CAT1
//_4g_atcmd_st g4_mqtt_param_info[] = {
//	    /*1.选择工作模式为：MQTT透传模式*/
//	    {5, "AT+WORK\r\n",      "AT+WORK=\"MQTT\"\r\n"},
//
//	    /*2.配置MQTT透传模式的工作参数*/
//	    {5, "AT+MQTTCD\r\n",    "AT+MQTTCD=\"alientek\"\r\n"},
//	    {5, "AT+MQTTUN\r\n",    "AT+MQTTUN=\"admin\"\r\n"},
//	    {5, "AT+MQTTPW\r\n",    "AT+MQTTPW=\"password\"\r\n"},
//	    {5, "AT+MQTTIP\r\n",    "AT+MQTTIP=\"cloud.alientek.com\",\"1883\"\r\n"},
//	    {5, "AT+MQTTSUB\r\n",   "AT+MQTTSUB=\"atk/sub\"\r\n"},
//	    {5, "AT+MQTTPUB\r\n",   "AT+MQTTPUB=\"atk/pub\"\r\n"},
//	    {5, "AT+MQTTCON\r\n",   "AT+MQTTCON=\"0\",\"0\",\"1\",\"300\"\r\n"},
//
//	    /*3.其他参数功能配置*/
//	   };
//#endif /*MQTT_4G_CAT1*/
//
//#if MODBUS_4G_CAT1
//_4g_atcmd_st g4_net_param_info[]= {
//
//		/*1.选择工作模式为：网络透传模式*/
//		{5, "AT+WORK\r\n",      "AT+WORK=\"NET\"\r\n"},
//
//		/*2.配置网络透传模式的工作参数*/
//		{5, "AT+LINK1EN\r\n",   "AT+LINK1EN=\"ON\"\r\n"},
//		{5, "AT+LINK1\r\n",     "AT+LINK1=\"TCP\",\"cloud.alientek.com\",\"59666\"\r\n"},
//		{5, "AT+LINK1MD\r\n",   "AT+LINK1MD=\"LONG\"\r\n"},
//		{5, "AT+LINK1TM\r\n",   "AT+LINK1TM=\"5\"\r\n"},
//
//		{5, "AT+LINK2EN\r\n",   "AT+LINK2EN=\"OFF\"\r\n"},
//		{5, "AT+LINK3EN\r\n",   "AT+LINK3EN=\"OFF\"\r\n"},
//		{5, "AT+LINK4EN\r\n",   "AT+LINK4EN=\"OFF\"\r\n"},
//
//		/*3.配置原子云功能：默认关闭*/
//		{5, "AT+SVREN\r\n",     "AT+SVREN=\"OFF\"\r\n"},
//
//		/*4.配置心跳包功能：默认打开         注意：强烈建议开启心跳包功能！！！*/
//		{5, "AT+HRTEN\r\n",     "AT+HRTEN=\"ON\"\r\n"},
//		{5, "AT+HRTDT\r\n",     "AT+HRTDT=\"414C49454E54454B2D4852544454\"\r\n"},
//		{5, "AT+HRTTM\r\n",     "AT+HRTTM=\"120\"\r\n"},
//		};
//#endif /*MODBUS_4G_CAT1*/
//
///* Private function prototypes----------------------------------------------------------------*/
//
///* Private functions--------------------------------------------------------------------------*/
///************************************************
//函数名称 ： send_data_to_4g
//功    能 ：发送数据给4g
//参    数 ：发送的数据及长度
//返 回 值 ：
//*************************************************/
//void send_data_to_4g(uint8_t *data, uint32_t size)
//{
//	Send_Data(&huart2,data,size);
//}
///************************************************
//函数名称 ： send_cmd_to_4g
//功    能 ：发送指令给4g
//参    数 ：发送的数据及长度
//返 回 值 ：1应答与发送指令相同  0配置成功  -1配置失败  -2超时
//*************************************************/
//static int send_cmd_to_4g(char *cmd, char *ask, uint32_t timeout)
//{
//	send_data_to_4g((uint8_t *)cmd, strlen(cmd));                               //发送指令给4g
//	while(!g4cat1_rx_flag)                                                      //等待应答，超时退出
//	{
//		timeout--;
//		if (timeout == 0)
//		{
//			return -2;
//		}
//		HAL_Delay(100);
//	}
//	if(g4cat1_rx_flag)                                                           //接收应答，检查应答信息
//	{
//		g4cat1_rx_flag = 0;
//		if (strstr((char *)g4cat1_rx_buffer, ask) != NULL)
//		{
//			return 1;
//		}
//		else if (strstr((char *)g4cat1_rx_buffer, "OK") != NULL)
//		{
//			return 0;
//		}
//		else if (strstr((char *)g4cat1_rx_buffer, "ERROR") != NULL)
//		{
//			return -1;
//		}
//	}
//}
//
///************************************************
//函数名称 ： g4_enter_configmode
//功    能 ：4g cat1进入配置模式
//参    数 ：无
//返 回 值 ：0 进入配置模式成功  -1进入配置模式失败
//*************************************************/
//static int g4_enter_configmode(void)
//{
//    int res;
//
//    /* 1.发送+++准备进入配置状态 */
//    res = send_cmd_to_4g("+++", "atk", 5);
//    if (res == -1)                                        /*返回ERRRO表示DTU已经处于配置状态*/
//    {
//        return 0;
//    }
//
//    /* 2.发送atk确认进入配置状态 */
//    res = send_cmd_to_4g("atk", "OK", 5);
//    if (res == -2)
//    {
//        return -1;
//    }
//
//    return 0;
//}
///************************************************
//函数名称 ： g4_enter_transfermode
//功    能 ：4g进透传模式
//参    数 ：无
//返 回 值 ：0 进入透传模式成功  -1进入透传模式失败
//*************************************************/
//static int g4_enter_transfermode(void)
//{
//    if (send_cmd_to_4g("ATO\r\n", "OK", 5) >= 0)
//    {
//        return 0;
//    }
//
//    return -1;
//}
///************************************************
//函数名称 ： g4_cmd_parameter
//功    能 ：g4命令参设设置
//参    数 ：无
//返 回 值 ：0 进入透传模式成功  -1进入透传模式失败
//*************************************************/
//static void g4_cmd_parameter(void)
//{
//	char command[100];
//#if MODBUS_4G_CAT1
//	snprintf(command, sizeof(command), "AT+LINK1=\"TCP\",\"%s\",\"%s\"\r\n",G4_IP, G4_PORT);                // IP PORT
//	g4_net_param_info[2].write_cmd = (char *)malloc(strlen(command) + 1);                               // 分配内存
//	if (g4_net_param_info[2].write_cmd != NULL)
//		strcpy(g4_net_param_info[2].write_cmd, command);                                                // 复制字符串到结构体指针
//	else
//		printf("Memory allocation failed for ip port \n");
//#endif /*MODBUS_4G_CAT1*/
//
//#if MQTT_4G_CAT1
//
//	snprintf(command, sizeof(command), "AT+MQTTCD=\"%s\"\r\n", G4_Client_ID);                                // client id
//	g4_mqtt_param_info[1].write_cmd = (char *)malloc(strlen(command) + 1);                               // 分配内存
//	if (g4_mqtt_param_info[1].write_cmd != NULL)
//		strcpy(g4_mqtt_param_info[1].write_cmd, command);                                                // 复制字符串到结构体指针
//    else
//		printf("Memory allocation failed for client id \n");
//
//	snprintf(command, sizeof(command), "AT+MQTTUN=\"%s\"\r\n", G4_User_Name);                                //user
//	g4_mqtt_param_info[2].write_cmd = (char *)malloc(strlen(command) + 1);                               // 分配内存
//	if (g4_mqtt_param_info[2].write_cmd != NULL)
//		strcpy(g4_mqtt_param_info[2].write_cmd, command);                                                // 复制字符串到结构体指针
//	else
//		printf("Memory allocation failed for user id\n");
//
//	snprintf(command, sizeof(command), "AT+MQTTPW=\"%s\"\r\n", G4_Password);                                 //password
//	g4_mqtt_param_info[3].write_cmd = (char *)malloc(strlen(command) + 1);                               // 分配内存
//	if (g4_mqtt_param_info[3].write_cmd != NULL)
//		strcpy(g4_mqtt_param_info[3].write_cmd, command);                                                // 复制字符串到结构体指针
//	else
//		printf("Memory allocation failed for password\n");
//
//	snprintf(command, sizeof(command), "AT+MQTTIP=\"%s\",\"%s\"\r\n", G4_Broker_Address,G4_Broker_Port);         // MQTT服务器地址
//	g4_mqtt_param_info[4].write_cmd = (char *)malloc(strlen(command) + 1);                               // 分配内存
//	if (g4_mqtt_param_info[4].write_cmd != NULL)
//		strcpy(g4_mqtt_param_info[4].write_cmd, command);                                                // 复制字符串到结构体指针
//	else
//		printf("Memory allocation failed for ip port\n");
//
//	snprintf(command, sizeof(command), "AT+MQTTSUB=\"%s\"\r\n",G4_Sub_Topic);                                //sub
//	g4_mqtt_param_info[5].write_cmd = (char *)malloc(strlen(command) + 1);                               // 分配内存
//	if (g4_mqtt_param_info[5].write_cmd != NULL)
//		strcpy(g4_mqtt_param_info[5].write_cmd, command);                                                // 复制字符串到结构体指针
//	else
//		printf("Memory allocation failed for sub\n");
//
//	snprintf(command, sizeof(command), "AT+MQTTPUB=\"%s\"\r\n",G4_Pub_Topic);                                //pub
//	g4_mqtt_param_info[6].write_cmd = (char *)malloc(strlen(command) + 1);                               // 分配内存
//	if (g4_mqtt_param_info[6].write_cmd != NULL)
//		strcpy(g4_mqtt_param_info[6].write_cmd, command);                                                // 复制字符串到结构体指针
//	else
//		printf("Memory allocation failed for sub\n");
//
//#endif /*MQTT_4G_CAT1*/
//}
///************************************************
//函数名称 ： g4_config_work_param
//功    能 ：配置4g工作参数
//参    数 ：指令参数，需要配置的指令个数
//返 回 值 ： 0所有指令配置成功，n第几个指令配置不成功
//*************************************************/
//static int g4_config_work_param(_4g_atcmd_st *work_param, uint8_t num)
//{
////    int i;
//    int res = 0;
//
//    for (j = 0; j < num; j++)
//    {
//        res = send_cmd_to_4g((work_param + j)->read_cmd,
//                              (work_param + j)->write_cmd + strlen((work_param + j)->read_cmd) - 1,
//                              work_param[j].timeout);
//
//        if (res == 1)                                            //如果4g内部参数和需要配置的参数一致，不需要重复去配置
//        {
//            continue;
//        }
//        else                                                     //4g内部参数与配置参数不一致，需要更新DTU内部参数
//        {
//            res = send_cmd_to_4g((work_param + j)->write_cmd,"OK",(work_param + j)->timeout);
//
//            if (res < 0)
//            {
//                return j+1;
//            }
//        }
//    }
//
//    return 0;
//}
///************************************************
//函数名称 ： g4cat1_config_init
//功    能 ：4gcat1配置初始化
//参    数 ：配置的模式
//返 回 值 ： 0 初始化成功，-1进入配置模式失败，-2参数配置失败，-3进入透传模式失败
//*************************************************/
//
//int g4cat1_config_init(_4g_work_mode_eu work_mode)
//{
//	int res;
//	g4_cmd_parameter();
//	/*1.进入配置状态*/
//	res = g4_enter_configmode();
//	if ( res != 0 )return -1;
//
//	/*2.配置工作参数*/
//	switch (work_mode)
//	{
//#if MODBUS_4G_CAT1
//		case G4_WORKMODE_NET:
//		{
//			res = g4_config_work_param((_4g_atcmd_st *)&g4_net_param_info, sizeof(g4_net_param_info) / sizeof(_4g_atcmd_st));
//			break;
//		}
//#endif /*MODBUS_4G_CAT1*/
//
//#if MQTT_4G_CAT1
//		case G4_WORKMODE_MQTT:
//		{
//			res = g4_config_work_param((_4g_atcmd_st *)&g4_mqtt_param_info, sizeof(g4_mqtt_param_info) / sizeof(_4g_atcmd_st));
//			break;
//		}
//#endif /*MQTT_4G_CAT1*/
//		default:break;
//	}
//	if( res != 0 )return -2;
//
//
//	/*3.进入透传状态*/
//	res = g4_enter_transfermode();
//	if( res != 0 )return -4;
//
//	return 0;
//}
//#endif /*4G_CAT1*/
